import {Component, OnInit} from '@angular/core';
import {_HttpClient} from '@delon/theme';
import {appConfig} from '../../../service/common';
import {Router} from '@angular/router';
import {NzModalService, NzNotificationService} from 'ng-zorro-antd';
import {UtilityService} from '../../../service/utils.service';
import {LogsModule} from '../../../service/common.module';
import * as moment from 'moment';

@Component({
    selector: 'app-logs',
    templateUrl: './logs.component.html',
})
export class LogsComponent implements OnInit {

    constructor(
        private http: _HttpClient,
        private router: Router,
        private utilityService: UtilityService,
    ) { }

    logitem: LogsModule = new LogsModule(); // 搜索值

    loading = false;
    isshow = true; // 是否是修改，默认不是
    lsTxt : string;
    // 应用
    operatorType = [
        { text: '查询', key: 'query' },
        { text: '新增数据', key: 'add' },
        { text: '修改数据',  key: 'update' },
        { text: '删除数据',  key: 'delete' }
    ];

    operatorResult = [
        { text: '成功', key: 'succ' },
        { text: '失败', key: 'fail' },
        { text: '系统处理异常',  key: 'exception' }
    ];
    modalVisible = false;
    showAdd: boolean;
    configTitle: any;


    data: any[] = []; // 表格数据
    headerData = [  // 配置表头内容
        { value: '应用guid', key: 'guid', isclick: false },
        { value: '操作类型', key: 'operateType', isclick: false },
        { value: '操作渠道', key: 'operateFrom', isclick: false },
        { value: '操作结果', key: 'operateResult', isclick: false },
        { value: '操作时间', key: 'operateTime', isclick: false },
        { value: '登录用户名', key: 'userId', isclick: false },
        // { value: '操作描述', key: 'operateDesc', isclick: false },
        { value: '操作描述', key: 'operateDescs', isclick: false },
    ];


    // 公共查询组件内容
    queryHeadata = [
        // 名称  代码   类型(select还是input还是data， 如果是select，那么就要定义select数据，可以直接传入也可以写死枚举值。然后hotTags，里面要定义运算符)
        // EQ 等于，NE 不等于，GT大于，GE大于等于，LT 小于，LIKE 模糊匹配， NOT_LIKE 非模糊匹配，IS_NULL 为空，IS_NOT_NULL 不为空，IN 包含，NOT_IN不包含，BETWEEN 介于，
        // NOT_BETWEEN 非介于
        { label: '操作类型', value: 'operateType', type: 'select', select: [
                { label: '新增数据', value: 'add' },
                { label: '修改数据',  value: 'update' },
                { label: '删除数据',  value: 'delete' }
            ], hotTags: [ { label: '=', value: 'EQ', check:false}, {label: '!=', value: 'NE', check:false}]},
        { label: '操作渠道', value: 'operateFrom',  type: 'input',hotTags: [ { label: '=', value: 'EQ', check:false}] },
        { label: '操作结果', value: 'operateResult',  type: 'input', hotTags: [ { label: '=', value: 'EQ', check:false}]},
        { label: '操作时间', value: 'operateTime', type: 'date', hotTags: [ { label: '=', value: 'EQ', check:false}] },
        { label: '登录用户名', value: 'userId',  type: 'input', hotTags: [ { label: 'LIKE', value: 'LIKE', check:false}]},
    ]

    moreData = {
        morebutton: true,
        buttons: [
            { key: 'Overview', value: '查看概况' }
        ]
    }
    test: string;
    page: any;
    total: number;
    pageIndex: number; // 当前页数
    ngOnInit() {
        this.getData(); // 只会触发一次，但是ngchanges并不会触发咋办
        this.showAdd = true;
        this.configTitle = {value: '查看详情', buttonCode: appConfig.funcObject.logs.logsInfo}
    }

    // 父组件初始化数据
    getData(option?) { // 初始化请求后台数据
        if (option) {
            this.pageIndex = 1;
            this.logitem = option;
            this.page = {
                condition: this.logitem, // 搜索内容
                page: {
                    current: this.pageIndex,
                    size: 10,
                    orderByField: 'operateTime', // 排序接口
                    asc: false // asc 默认是true  升序排序，时间类型 用false， 降序
                }
            };
        } else {
            this.page = {
                page: {
                    current: this.pageIndex,
                    size: 10,
                    orderByField: 'operateTime', // 排序接口
                    asc: false // asc 默认是true  升序排序，时间类型 用false， 降序
                }
            };
        }

        this.utilityService.postData(appConfig.serverUrl + appConfig.API.logList, this.page)
            .subscribe(
                (val) => {
                    console.log(val.result)
                    for(let i = 0; i < val.result.records.length; i ++) {
                        this.lsTxt = val.result.records[i].operateDesc;
                        val.result.records[i].operateTime = moment(Number(val.result.records[i].operateTime)).format('YYYY-MM-DD HH:MM:ss');
                        if(this.lsTxt.length>20){
                            val.result.records[i].operateDescs = (this.lsTxt.substr(0,10)+"..."+this.lsTxt.substr(this.lsTxt.length-10,this.lsTxt.length));
                        }else{
                            val.result.records[i].operateDescs = this.lsTxt;
                        }
                    }
                    this.data = val.result.records;
                    this.total = val.result.total;
                    console.log(this.data)
                }
            );
    }


    // 想一下，能否把这三个方法封装到一个ts里面，引入即可，不然每次都写着三个方法不太现实。
    // 列表组件传过来的内容
    addHandler(event) {
        this.router.navigate(['logData'],
            { queryParams:
                    {
                        // logInfo: JSON.stringify(event)
                        logGuid: event.guid
                    }
            });
    }

    // 列表传入的翻页数据
    monitorHandler(event) {
        this.pageIndex = event;
        this.getData();

    }


    // 处理行为代码，跳转、弹出框、其他交互
    isActive(event) {
    }

    selectedRow(event) { // 选中方法，折叠层按钮显示方法
    }
    // 搜索框
    search() {
        this.getData(this.logitem)
    }
    reset($event) {
        this.queryHeadata = []
        this.getData();
    }
    // selete监听方法
    checkSelect(i, k) {

    }
    deleatData(event) {


    }

    buttonDataHandler(event) {
        if (event.value === 'Authority') {
            console.log(event.key);
        }

        if (event.value === 'Overview') {
            console.log(event.key);
        }

    }
}
